我們平常傳送檔案的時候常常用到壓縮器
,不論是 rar
、zip
等,有了這些壓縮器都使我們傳送檔案可以使更少的空間,或是更安全的加密。而使用 PE 執行檔時我們有時也會使用壓縮 ,而這個壓縮器則稱為運行時壓縮器
,它會在程式執行時將程序解壓縮並正確執行。這些程式有些能讓逆向檢測難以發現原本的意圖,俗稱為”殼
”。
運行時壓縮器,PE檔案的專用壓縮器。他的主要用途有 :
API
、字串等資料。保護器
則與壓縮器
的功能在目的上不同,它的主要目標是防止 PE 文件被逆向分析,所以應用了許多防止逆向分析的技術,像是垃圾代碼、反測試、混亂代碼等。致使完成保護後的代碼可能比原本的程式還要大。
像是防止破解、防遊戲外掛等都會利用保護器來防止攻擊。另外病毒等惡意代碼也會使用保護器來避免被分析。
練習檔 :
https://github.com/Dinlon5566/IT_Reverse_Engineering/tree/main/Dx11
這邊來利用 UPX
壓縮 notepad.exe
來加殼 ,觀察其 section
改變:
會發現到經過 UPX
後,第一個 Section
( UPX[0]
) 的 RawAddress
是 0
,並且與 UPX[1]
的部分重疊。但是可以看見它所分配的空間有 10000
,這使得程式可以再裝載時一次把所有程序都載入到這個空間。而需要解壓縮的文件與解壓縮的程式都寫在了第二個 Section
。
原本的
壓縮後的
下一篇將實際解析被 UPX 加殼的檔案是如何破殼而出的。
喔對了,現在大部分防毒軟體只要看到有常見的殼就認為是病毒喔。